package service

import (
	"errors"
	"gin-wave-im/global"
	"gin-wave-im/model"
	"log"
)

// 添加好友
func AddFriend(userId uint64, dstId uint64) error {
	db := global.GnDb
	var dstUser model.User
	db.Where("id = ?", dstId).First(&dstUser)
	if dstUser.ID == 0 {
		return errors.New("该用户不存在！")
	}
	if userId == dstUser.ID {
		return errors.New("不能添加自己为好友啊！")
	}
	//判断是否已经加了好友
	tmp := model.Contact{}
	db.Where("owner_id = ?", userId).Where("dst_id = ?", dstId).Where("cate = ?", model.CONCAT_CATE_USER).First(&tmp)
	if tmp.ID > 0 {
		return errors.New("该用户已是您的好友啦！")
	}

	// 开启事务
	tx := db.Begin()
	myContact := model.Contact{
		OwnerId: userId,
		DstId:   dstId,
		Cate:    model.CONCAT_CATE_USER,
	}
	if err := tx.Create(&myContact).Error; err != nil {
		log.Println("数据库错误：", err)
		tx.Rollback()
		return errors.New("数据库错误！")
	}
	dstContact := model.Contact{
		OwnerId: dstId,
		DstId:   userId,
		Cate:    model.CONCAT_CATE_USER,
	}
	if err := tx.Create(&dstContact).Error; err != nil {
		log.Println("数据库错误：", err)
		tx.Rollback()
		return errors.New("数据库错误！")
	}
	if err := tx.Commit().Error; err != nil {
		log.Println("数据库错误：", err)
		tx.Rollback()
		return errors.New("数据库错误！")
	}

	return nil
}

// 获得用户好友列表
func FriendList(userId uint64) ([]uint64, error) {
	tmp := []model.Contact{}
	var dstIds []uint64
	global.GnDb.Where("owner_id = ?", userId).Where("cate = ?", model.CONCAT_CATE_USER).Find(&tmp)
	if len(tmp) == 0 {
		return dstIds,errors.New("没有好友！")
	}
	for _,dst := range tmp{
		dstIds = append(dstIds, dst.DstId)
	}

	return dstIds,nil
}

// 判断是否好友
func IsFriend(userId uint64, dstId uint64) bool {
	if userId == dstId {
		return true
	}
	tmp := model.Contact{}
	global.GnDb.Where("owner_id = ?", userId).Where("dst_id = ?", dstId).Where("cate = ?", model.CONCAT_CATE_USER).Find(&tmp)
	if tmp.ID > 0 {
		return true
	} else {
		return false
	}
}